package br.academia.dominio;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.academia.util.Validador;

@SuppressWarnings("serial")
@Entity
@Table(name="avaliacao", schema="public")
public class AvaliacaoFisica extends PersistDB{
	@Id
	@Column(name="id_avaliacao")
	@SequenceGenerator(allocationSize=1, name = "SEQ_ID_AVALIACAO", sequenceName = "public.seq_id_avaliacao")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ID_AVALIACAO")
	private int id;
	
	@ManyToOne
	@JoinColumn(name="id_aluno")
	private Aluno aluno;
	
	@ManyToOne
	@JoinColumn(name="id_funcionario")
	private Funcionario funcionario;
	
	@Column(name="data_cadastro")
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	@Column
	private String objetivo;
	
	@Column
	private String observacoes;
	
	@Column
	private Float pesoAtual;
	
	@Column
	private Float altura;
	
	@Column
	private Float densidadeCorporal;
	
	@Column
	private Float taxaGordura;
	
	@Column
	private Float pesoMagro;
	
	@Column
	private Float pesoGordo;
	
	@Column
	private Float pesoOsseo;
	
	@Column
	private Float pesoResidual;
	
	@Column
	private Float pesoMuscular;
	
	@Column
	private Float pesoIdeal;
	
	@Column
	private Float pesoDesejado;
	
	@Column
	private Float taxaGorduraDesejada;
	
	/* # Dobras Cutaneas #
	 * (Subescapular, Tríceps, Peitoral, Axilar-média,
	 * Supra-ilíaca, Supra-espinhal, Abdominal,
	 * Coxa, Panturrilha)
	 */
	@Column
	private Float subescapular;

	@Column
	private Float triceps;
	
	@Column
	private Float peitoral;
	
	@Column
	private Float axilarMedia;

	@Column
	private Float supraIliaca;

	@Column
	private Float supraEspinhal;

	@Column
	private Float abdominal;

	@Column
	private Float coxa;

	@Column
	private Float panturrilha;

	/* # COLUNA VERTEBRAL #
	 * (Hiperlordose Lombar, Hipercifose Hiperlordose Cervical,
	 * Retificação Lombar, Retificação Dorsal, Retificação Cervical,
	 * Escoliose)
	 */
	@Column
	private Boolean hiperlordoseLombar;

	@Column
	private Boolean hipercifoseLombar;
	
	@Column
	private Boolean hiperlordoseCervical;
	
	@Column
	private Boolean hipercifoseCervical;
	
	@Column
	private Boolean retificacaoLombar;
	
	@Column
	private Boolean retificacaoDorsal;
	
	@Column
	private Boolean retificacaoCervical;
	
	@Column
	private Boolean escoliose;
	
	/* # Cintura Escapular #
	 * (Rotação Interna, Protusão de Ombros,
	 * Depressão de Ombros, Rotação Externa,
	 * Retração de Ombros, Assimetria de Ombros)
	 */
	@Column
	private Boolean rotacaoInterna;
	
	@Column
	private Boolean rotacaoExterna;
	
	@Column
	private Boolean protusaoOmbros;
	
	@Column
	private Boolean depressaoOmbros;
	
	@Column
	private Boolean retracaoOmbros;
	
	@Column
	private Boolean assimetriaOmbros;

	/* # Cintura Pélvica #
	 * (Anteversão, Antepulsão, Retroversão,
	 * Retropulsão, Assimetria de Quadril)
	 */
	@Column
	private Boolean anteversao;
	
	@Column
	private Boolean antepulsao;
	
	@Column
	private Boolean retroversao;
	
	@Column
	private Boolean retropulsao;
	
	@Column
	private Boolean assimetriaQuadril;

	/* # Joelhos #
	 * (Geno, Flexo, Geno Recurvato, Geno Varo, Geno Valgo, 
	 * Pé Abduzidos, Pé Aduzidos, Pé Cavo, Pé plano)
	 */
	@Column
	private Boolean genoFlexo;
	
	@Column
	private Boolean genoRecurvato;
	
	@Column
	private Boolean genoVaro;
	
	@Column
	private Boolean genoValgo;
	
	@Column
	private Boolean pesAbduzidos;
	
	@Column
	private Boolean pesAduzidos;
	
	@Column
	private Boolean pesCavos;
	
	@Column
	private Boolean pesPlanos;
	
	public AvaliacaoFisica(){
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getObjetivo() {
		return objetivo;
	}

	public void setObjetivo(String objetivo) {
		this.objetivo = objetivo;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public Float getPesoAtual() {
		return pesoAtual;
	}

	public void setPesoAtual(Float pesoAtual) {
		this.pesoAtual = pesoAtual;
	}

	public Float getAltura() {
		return altura;
	}

	public void setAltura(Float altura) {
		this.altura = altura;
	}

	public Float getDensidadeCorporal() {
		return densidadeCorporal;
	}

	public void setDensidadeCorporal(Float densidadeCorporal) {
		this.densidadeCorporal = densidadeCorporal;
	}

	public Float getTaxaGordura() {
		return taxaGordura;
	}

	public void setTaxaGordura(Float taxaGordura) {
		this.taxaGordura = taxaGordura;
	}

	public Float getPesoMagro() {
		return pesoMagro;
	}

	public void setPesoMagro(Float pesoMagro) {
		this.pesoMagro = pesoMagro;
	}

	public Float getPesoGordo() {
		return pesoGordo;
	}

	public void setPesoGordo(Float pesoGordo) {
		this.pesoGordo = pesoGordo;
	}

	public Float getPesoOsseo() {
		return pesoOsseo;
	}

	public void setPesoOsseo(Float pesoOsseo) {
		this.pesoOsseo = pesoOsseo;
	}

	public Float getPesoResidual() {
		return pesoResidual;
	}

	public void setPesoResidual(Float pesoResidual) {
		this.pesoResidual = pesoResidual;
	}

	public Float getPesoMuscular() {
		return pesoMuscular;
	}

	public void setPesoMuscular(Float pesoMuscular) {
		this.pesoMuscular = pesoMuscular;
	}

	public Float getPesoIdeal() {
		return pesoIdeal;
	}

	public void setPesoIdeal(Float pesoIdeal) {
		this.pesoIdeal = pesoIdeal;
	}

	public Float getPesoDesejado() {
		return pesoDesejado;
	}

	public void setPesoDesejado(Float pesoDesejado) {
		this.pesoDesejado = pesoDesejado;
	}

	public Float getTaxaGorduraDesejada() {
		return taxaGorduraDesejada;
	}

	public void setTaxaGorduraDesejada(Float taxaGorduraDesejada) {
		this.taxaGorduraDesejada = taxaGorduraDesejada;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}
	
	public String getDataCadastroFormatada() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		
		if(Validador.isEmpty(dataCadastro)){
			return "";
		}
		
		return sdf.format(dataCadastro);
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Float getSubescapular() {
		return subescapular;
	}

	public void setSubescapular(Float subescapular) {
		this.subescapular = subescapular;
	}

	public Float getTriceps() {
		return triceps;
	}

	public void setTriceps(Float triceps) {
		this.triceps = triceps;
	}

	public Float getPeitoral() {
		return peitoral;
	}

	public void setPeitoral(Float peitoral) {
		this.peitoral = peitoral;
	}

	public Float getAxilarMedia() {
		return axilarMedia;
	}

	public void setAxilarMedia(Float axilarMedia) {
		this.axilarMedia = axilarMedia;
	}

	public Float getSupraIliaca() {
		return supraIliaca;
	}

	public void setSupraIliaca(Float supraIliaca) {
		this.supraIliaca = supraIliaca;
	}

	public Float getSupraEspinhal() {
		return supraEspinhal;
	}

	public void setSupraEspinhal(Float supraEspinhal) {
		this.supraEspinhal = supraEspinhal;
	}

	public Float getAbdominal() {
		return abdominal;
	}

	public void setAbdominal(Float abdominal) {
		this.abdominal = abdominal;
	}

	public Float getCoxa() {
		return coxa;
	}

	public void setCoxa(Float coxa) {
		this.coxa = coxa;
	}

	public Float getPanturrilha() {
		return panturrilha;
	}

	public void setPanturrilha(Float panturrilha) {
		this.panturrilha = panturrilha;
	}

	public Boolean getHiperlordoseLombar() {
		return hiperlordoseLombar;
	}

	public void setHiperlordoseLombar(Boolean hiperlordoseLombar) {
		this.hiperlordoseLombar = hiperlordoseLombar;
	}

	public Boolean getHipercifoseLombar() {
		return hipercifoseLombar;
	}

	public void setHipercifoseLombar(Boolean hipercifoseLombar) {
		this.hipercifoseLombar = hipercifoseLombar;
	}

	public Boolean getHiperlordoseCervical() {
		return hiperlordoseCervical;
	}

	public void setHiperlordoseCervical(Boolean hiperlordoseCervical) {
		this.hiperlordoseCervical = hiperlordoseCervical;
	}

	public Boolean getHipercifoseCervical() {
		return hipercifoseCervical;
	}

	public void setHipercifoseCervical(Boolean hipercifoseCervical) {
		this.hipercifoseCervical = hipercifoseCervical;
	}

	public Boolean getRetificacaoLombar() {
		return retificacaoLombar;
	}

	public void setRetificacaoLombar(Boolean retificacaoLombar) {
		this.retificacaoLombar = retificacaoLombar;
	}

	public Boolean getRetificacaoDorsal() {
		return retificacaoDorsal;
	}

	public void setRetificacaoDorsal(Boolean retificacaoDorsal) {
		this.retificacaoDorsal = retificacaoDorsal;
	}

	public Boolean getRetificacaoCervical() {
		return retificacaoCervical;
	}

	public void setRetificacaoCervical(Boolean retificacaoCervical) {
		this.retificacaoCervical = retificacaoCervical;
	}

	public Boolean getEscoliose() {
		return escoliose;
	}

	public void setEscoliose(Boolean escoliose) {
		this.escoliose = escoliose;
	}

	public Boolean getRotacaoInterna() {
		return rotacaoInterna;
	}

	public void setRotacaoInterna(Boolean rotacaoInterna) {
		this.rotacaoInterna = rotacaoInterna;
	}

	public Boolean getRotacaoExterna() {
		return rotacaoExterna;
	}

	public void setRotacaoExterna(Boolean rotacaoExterna) {
		this.rotacaoExterna = rotacaoExterna;
	}

	public Boolean getProtusaoOmbros() {
		return protusaoOmbros;
	}

	public void setProtusaoOmbros(Boolean protusaoOmbros) {
		this.protusaoOmbros = protusaoOmbros;
	}

	public Boolean getDepressaoOmbros() {
		return depressaoOmbros;
	}

	public void setDepressaoOmbros(Boolean depressaoOmbros) {
		this.depressaoOmbros = depressaoOmbros;
	}

	public Boolean getRetracaoOmbros() {
		return retracaoOmbros;
	}

	public void setRetracaoOmbros(Boolean retracaoOmbros) {
		this.retracaoOmbros = retracaoOmbros;
	}

	public Boolean getAssimetriaOmbros() {
		return assimetriaOmbros;
	}

	public void setAssimetriaOmbros(Boolean assimetriaOmbros) {
		this.assimetriaOmbros = assimetriaOmbros;
	}

	public Boolean getAnteversao() {
		return anteversao;
	}

	public void setAnteversao(Boolean anteversao) {
		this.anteversao = anteversao;
	}

	public Boolean getAntepulsao() {
		return antepulsao;
	}

	public void setAntepulsao(Boolean antepulsao) {
		this.antepulsao = antepulsao;
	}

	public Boolean getRetroversao() {
		return retroversao;
	}

	public void setRetroversao(Boolean retroversao) {
		this.retroversao = retroversao;
	}

	public Boolean getRetropulsao() {
		return retropulsao;
	}

	public void setRetropulsao(Boolean retropulsao) {
		this.retropulsao = retropulsao;
	}

	public Boolean getAssimetriaQuadril() {
		return assimetriaQuadril;
	}

	public void setAssimetriaQuadril(Boolean assimetriaQuadril) {
		this.assimetriaQuadril = assimetriaQuadril;
	}

	public Boolean getGenoFlexo() {
		return genoFlexo;
	}

	public void setGenoFlexo(Boolean genoFlexo) {
		this.genoFlexo= genoFlexo;
	}

	public Boolean getGenoRecurvato() {
		return genoRecurvato;
	}

	public void setGenoRecurvato(Boolean genoRecurvato) {
		this.genoRecurvato = genoRecurvato;
	}

	public Boolean getGenoVaro() {
		return genoVaro;
	}

	public void setGenoVaro(Boolean genoVaro) {
		this.genoVaro = genoVaro;
	}

	public Boolean getGenoValgo() {
		return genoValgo;
	}

	public void setGenoValgo(Boolean genoValgo) {
		this.genoValgo = genoValgo;
	}

	public Boolean getPesAbduzidos() {
		return pesAbduzidos;
	}

	public void setPesAbduzidos(Boolean pesAbduzidos) {
		this.pesAbduzidos = pesAbduzidos;
	}

	public Boolean getPesAduzidos() {
		return pesAduzidos;
	}

	public void setPesAduzidos(Boolean pesAduzidos) {
		this.pesAduzidos = pesAduzidos;
	}

	public Boolean getPesCavos() {
		return pesCavos;
	}

	public void setPesCavos(Boolean pesCavos) {
		this.pesCavos = pesCavos;
	}

	public Boolean getPesPlanos() {
		return pesPlanos;
	}

	public void setPesPlanos(Boolean pesPlanos) {
		this.pesPlanos = pesPlanos;
	}
}
